package d1_byte_stream;

import java.io.FileInputStream;
import java.io.InputStream;

public class FileInputStreamDemo01 {
    public static void main(String[] args) throws Exception {//抛给虚拟机
        //目标: 掌握文件字节输入流每次读取一个字节的形式
        //1、创建文件字节输输入流管道与目标接通
        //FileNotFoundException
        //                          为什么会出现编译时异常 --> sun公司害怕路径不正确, 或者文件不存在
        // FileInputStream is = new FileInputStream(
        //       new File("javapromax\\day09-charset-io\\src\\陈平安.txt"));//完整写法
        InputStream is = new FileInputStream("javapromax\\day09-charset-io\\src\\陈平安.txt");//简略写法


        //2、每次读取一个字节返回
        //public int read(); 每次读取一个字节 如果没有字节可以读返回-1
        //int b1 = is.read();
        //System.out.println((char)b1);//使用UTF-8进行解码
        //
        //int b2 = is.read();
        //System.out.println((char)b2);
        //
        //int b3 = is.read();
        //System.out.println(b3);//-1没有对应的字符,不要进行转换

        //IO流是往前冲的, 前面读完了,后面是无法读取的
        //3、使用循环改进
        int b;//用于记住每次读取一个字节
        while((b = is.read()) != -1){//括号有等号,是向看左
            System.out.print((char)b);//文本内容自带换行, 如果进行换行,会打印成一个棍子
        }

        //拓展
        //   1、这个代码简直就是个垃圾
        //          a、性能很差, 每次一个一个字节读, 性能很差! 要进行IO操作  java程序在内存中  文件在磁盘里面
                                                //每次读字节,都是要进行一次IO操作
                                                // 一次IO的性能是比较差的
                                                //它要占这根总线。这根总线是要跨内存，跨磁盘，跨区域去通信，它的性能相对较慢
                                                //如果有一万个字节,就要进行一万次系统调用(每次系统需要耗时)
        //          b、无法避免读取汉字输出乱码的问题, 会截断汉字的字节。 一冲上去,就会把汉字的第一个字节拆出来, 很定会乱码



        is.close();//记住要进行关闭流

    }
}
